﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using vensoft.Entities;

namespace vensoft.DataAccess
{
    public class DetallePedidoDataAccess : MasterDataAcess , IDetallePedidoDataAccess
    {
        IPedidoDataAccess _pedidoDataAccess;
        IProductoDataAccess _productoDAL;

        public DetallePedidoDataAccess(IPedidoDataAccess pedidoDataAccess)
        {
            _pedidoDataAccess = pedidoDataAccess;
        }

        public DetallePedidoDataAccess()
        {
            // TODO: Complete member initialization
        }

        public void RegistrarDetalle(DetallePedido detalle)
        {
            SqlCommand comand = base.CreateCommand("RegistrarDetPedido");

            base.AddInParameter(comand, "Cod_Pedido", detalle.PedidoId);
            base.AddInParameter(comand, "Cod_Producto", detalle.ProductoId);            
            base.AddInParameter(comand, "Cantidad", detalle.Cantidad);            
            base.AddInParameter(comand, "Monto", detalle.Monto);
            base.AddInParameter(comand, "Precio",detalle.Precio);
            base.AddInParameter(comand, "nomb_Prod", detalle.ProductoName);

            base.ExecuteCommand(comand);
            _pedidoDataAccess.ActualizarStock(detalle.ProductoId, Int32.Parse(detalle.Cantidad.ToString()));
        }

        public void RegistrarDetalle(List<DetallePedido> detalles, int pedidoId)
        {
            foreach (var detalle in detalles)
            {
                detalle.PedidoId = pedidoId;
                RegistrarDetalle(detalle);
            }
        }
        
        public List<DetallePedido> RetornarProductos(int cod_pedido)
        {
            SqlCommand commando = base.CreateSelectCommand("RetornarProductoPedido");
            base.AddInParameter(commando, "Cod_Pedido", cod_pedido);
            return SelectObjectFactory(commando);
        }

        private List<DetallePedido> SelectObjectFactory(SqlCommand commando)
        {
            List<DetallePedido> lista = new List<DetallePedido>();

            using (SqlDataReader reader = base.ExecuteReader(commando))
            {
                while (reader.Read())
                {
                    DetallePedido pedido = new DetallePedido()
                    {
                        ProductoId = reader.GetInt32(1),                        
                        Cantidad = reader.GetInt32(3),
                        Precio = reader.GetDecimal(5),
                        Monto = reader.GetDecimal(4),
                        ProductoName = reader.GetString(2)
                    };

                    lista.Add(pedido);
                }
            }

            return lista;
        }
        public List<DetallePedido> GetFromDetalleByCodigoPedido(int codPedido)
        {
            SqlCommand comando = base.CreateSelectCommand("GetProductosFromAlmacen");
            return SelectObjectFactory(comando);
        }

    }
}
